package com.navinfo.platform.trip.common.util;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

/**
 * 通用工具类
 * @author 马驰
 * @modify web
 */

public class CommonUtils {

    /**
     * 通过split分割str
     * @param str 待分割字符串
     * @param split 分割字符
     * @return  分割后的数组
     */
    public static List<String> splitStr(String str, String split) {
        List<String> list = new ArrayList<>();
        if (str != null) {
            String[] ss = str.split(split);
            for (String f : ss) {
                list.add(f.trim());
            }
        }
        return list;
    }

    /**
     * 将list中的数据toString后用split作为分隔符，返回一个大的字符串
     * @param list 数组
     * @param split 分割字符
     * @return  拼接的字符串
     */
    public static String mkString(Collection<?> list, String split) {
        StringBuilder stringBuilder = new StringBuilder();

        if(null!=list && list.size()>0){
            int i = 0;
            for (Object obj : list) {
                if (null != obj) {
                    if (i != 0) {
                        stringBuilder.append(split);
                    }
                    stringBuilder.append(obj);
                    i++;
                }
            }
        }

        return stringBuilder.toString();
    }

    /**
     * 判断字符串是否为空
     * @param str 字符串
     * @return  是否为空
     */
    public static boolean isStrEmpty(String str) {
        return str==null || str.length() == 0;
    }

    /**
     * 判断字符串是否为f非空
     * @param str 字符串
     * @return  是否为非空
     */
    public static boolean isStrNotEmpty(String str) {
        return !isStrEmpty(str);
    }

    /**
     * 判断集合是否为空
     * @param collection 集合
     * @return  是否为空
     */
    public static boolean isCollectionEmpty(Collection<?> collection) {
        return collection == null || collection.size() == 0;
    }

    /**
     * 判断集合不为空
     * @param collection 集合
     * @return 是否不为空
     */
    public static boolean isCollectionNotEmpty(Collection<?> collection) {
        return !isCollectionEmpty(collection);
    }

    /**
     * 获取异常的堆栈信息.
     * @param t 异常
     * @return String
     */
    public static String getStackTrace(Throwable t, int maxLength) {
        if (maxLength == 0) {
            return "";
        }
        StringWriter sw = new StringWriter();
        try (PrintWriter pw = new PrintWriter(sw)) {
            t.printStackTrace(pw);
            if (sw.toString().length() <= maxLength) {
                return sw.toString();
            }
            return sw.toString().substring(0, maxLength - 1);
        }
    }

    /**
     * iterator转换为List
     * @param iterator
     * @param <E>
     * @return
     */
    public static <E> List<E> toList(Iterator<? extends E> iterator) {
        if (iterator == null) {
            throw new NullPointerException("Iterator must not be null");
        }

        final List<E> list = new ArrayList<E>();
        while (iterator.hasNext()) {
            list.add(iterator.next());
        }
        return list;
    }

}
